import java.util.*;
import java.util.stream.Collectors;
public class WordFrequencyCounter {
    public static void main(String[] args) {
        // 1. 初始化TreeMap用于存储单词-频率映射（按单词自然顺序排序）
        TreeMap<String, Integer> wordCounts = new TreeMap<>();

        // 2. 接收用户输入文本
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一段英文文本（以空格分隔单词，输入完成后按回车）：");
        String input = scanner.nextLine();
        scanner.close();

        // 3. 预处理文本：分割单词、去除标点、转小写
        String[] words = input.split("\\s+"); // 按空格分割
        for (String word : words) {
            // 去除单词中的非字母字符（只保留a-z、A-Z），并转为小写
            String cleanedWord = word.replaceAll("[^a-zA-Z]", "").toLowerCase();
            if (cleanedWord.isEmpty()) {
                continue; // 跳过空字符串（如纯标点分割的情况）
            }
            // 统计频率：若单词已存在则+1，否则初始化为1
            wordCounts.put(cleanedWord, wordCounts.getOrDefault(cleanedWord, 0) + 1);
        }

        // 4. 按字母顺序展示所有单词的频率
        System.out.println("\n===== 单词频率统计结果（按字母顺序） =====");
        for (Map.Entry<String, Integer> entry : wordCounts.entrySet()) {
            System.out.printf("%-10s 出现次数：%d%n", entry.getKey(), entry.getValue());
        }

        // 5. 找出出现次数最多的单词（可能有多个并列）
        if (!wordCounts.isEmpty()) {
            // 获取最大频率值
            int maxFrequency = Collections.max(wordCounts.values());
            // 筛选出所有频率等于最大值的单词
            List<String> mostFrequentWords = wordCounts.entrySet().stream()
                    .filter(entry -> entry.getValue() == maxFrequency)
                    .map(Map.Entry::getKey)
                    .collect(Collectors.toList());

            System.out.println("\n===== 出现次数最多的单词 =====");
            System.out.printf("最高出现次数：%d，对应的单词：%s%n",
                    maxFrequency,
                    String.join(", ", mostFrequentWords));
        } else {
            System.out.println("\n输入文本中未包含有效单词！");
        }
    }
}
